package leetcode.primary.array;

/**
 * TODO 给定一个由 整数 组成的 非空 数组所表示的非负整数，在该数的基础上加一。
 *
 * 最高位数字存放在数组的首位， 数组中每个元素只存储单个数字。
 *
 * 你可以假设除了整数 0 之外，这个整数不会以零开头。
 * 示例 1：
 *
 * 输入：digits = [1,2,3]
 * 输出：[1,2,4]
 * 解释：输入数组表示数字 123。
 *
 * 作者：力扣 (LeetCode)
 * 链接：https://leetcode.cn/leetbook/read/top-interview-questions-easy/x2cv1c/
 * 来源：力扣（LeetCode）
 * 著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。
 *
 * @author david
 * @version 1.0
 * @date 2022/7/149:44
 */
public class PlusOne {
    public static void main(String[] args) {
        int [] digits={1,2,3};
        int [] ints2={9,9,9};
        int [] data=plusOne(ints2);
        for ( int i=0;i<data.length;i++){
            System.out.println(data[i]);
        }
    }
    public  static int[] plusOne(int [] digits){
            int len=digits.length-1;
            //思路：从后往前遍历数组，若加一后需要进位则把当前下标置为0，然后依次判断下一位直至遍历整个数组，若不需要进位直接返回即为最终结果
            for (int i=len;i>=0;i--){
                if (digits[i]!=9){
                    digits[i]++;
                    return digits;
                }else {
                    digits[i]=0;
                }
            }

            // 全是9的情况，需要扩增数组。
            int [] data=new int[len+2];
            data[0]=1;
            return  data;
    }
}

